<?php namespace Home\Controller;
use Common\Model\Cate;
use Common\Model\Coattribute;
use Common\Model\Commod;
use Common\Model\Tatt;
use Hdphp\Controller\Controller;

class ListController extends Controller{
    public function index(){
////        1、获取头部分类名称
        $cateModel=new Cate();
//        $topCate=$cateModel->where("pid=0")->get();
        //2.通过当前分类的cid获得所有子集的cid
        $cid= Q('get.cid',0,'intval');
        $cids = $cateModel->getSon($cateModel->get(),$cid);
        $cids[] = $cid;
//        3根据cid获得商品的coid
        $commodModel=new Commod();
        $coids=$commodModel->where("shop_category_cid IN(".implode(',',$cids).")")->lists('coid');
        //4.通过coid到coattr表查询属性
        if($coids){
            $coattrModel=new Coattribute();
            $coattr=$coattrModel->where("shop_commodity_coid IN(".implode(',',$coids).")")
                ->groupBy('coattvalue')->get();
            //5.把相同的taid的属性放在一起
            $sameTaid=[];
            foreach($coattr as $u){
                $sameTaid[$u['shop_typeattribute_taid']][]=$u;
            }
//            6.组合名字和值
            $typeattrModel=new Tatt();
            $finalAttr=[];
            foreach($sameTaid as $taid=>$v){
                $finalAttr[]=[
                    'name'=>$typeattrModel->where("taid={$taid}")->pluck('taname'),
                    'value'=>$v,
                ];
            }
            View::with('finalAttr',$finalAttr);
//            p($coattr);die;
//            7地址栏效果************
            $num=count($finalAttr);
//            判断前面点没点过筛选的条件，没有就都默认是所有条件个数个0
            $param=isset($_GET['param'])?explode('_',$_GET['param']):array_fill(0,$num,0);
            View::with('param',$param);
//            8 筛选操作,最终获得商品coid,执行自己自定义的方法 传两个参数一个是param 另一个是coids=>上面根据cid获得的商品coid集合
            $finalCoids=$this->filer($param,$coids);
//            p($finalCoids);
//            p($coids);die;
            $countNUM=count($finalCoids);
            View::with('countNUM',$countNUM);
//            9 通过$finalCoids查找相关商品
            $u=implode(',',$finalCoids);
            if($u){
                $commolistData=$commodModel->where("coid IN ($u)")->get();
                View::with('commolistData',$commolistData);
            }else{
                View::with('commolistData',[]);
            }

        }else{
//            说明当前选的分类下没有商品
            View::with('finalAttr',[]);
        }
//        View::with('topCate',$topCate);
//        列表页相关搜索部分
        $xiangguanData=$cateModel->where("pid={$cid}")->get();
//        p($xiangguanData);die;
        View::with('xiangguanData',$xiangguanData);
        View::make();
    }

    private function filer($param,$cidcoids){
        $coattModel=new Coattribute();
        $coids=[];
//        循环param
        foreach($param as $coattid){
            //如果点击的不是"不限"的时候
            //根据coattid得到商品的coid
            if($coattid){
                $coattvalue=$coattModel->where("coattid={$coattid}")->pluck('coattvalue');
//                p($coattid);die;
//                再通过属性值找到对应的商品coid
                $coids[]=$coattModel->where("coattvalue='{$coattvalue}'")->lists('shop_commodity_coid');
            }
        }
//        p($coids);
        //如果$coid有值的时候,也就是用户不是全部"不限"的时候开始取交集，先取里面的第一个， 和自己取交集
        //然后再赋给它   在通过foreach 循环一次和后面的取交集
        if($coids){
           $coid=$coids[0];
            foreach($coids as $u){
                $coid=array_intersect($u,$coid);
            }
            //因为$coid有可能是其他分类的coid,那么为了确保是当前分类,再次取交集
            $finalCoids=array_intersect($coid,$cidcoids);
        }else{
            //如果全部是"不限"的时候
            $finalCoids=$cidcoids;
        }

        return $finalCoids;
    }

}

